#pragma once

#include <string>
#include <iostream>
#include <vector>
#include "InitAddr.hpp"

class Route
{
private:
    bool IsExist(InitAddr& peer)
    {
        for(auto& user : _online_user)
        {
            if(user == peer)
                return true;
        }
        return false;
    }

    void AddUser(InitAddr& peer)
    {
        std::cout << "新增在线用户:" << peer.port() << "||" << peer.ip() << std::endl;
        _online_user.push_back(peer);
    }
public:
    void MessageRoute(int sockfd, const std::string& message, InitAddr& peer)
    {
        // 这里需要加锁，可以引入之前写的 LockGuard
        //记录下来所有在线的人
        if(!IsExist(peer))
        {
            AddUser(peer);
        }

        std::string send_message = peer.StringAddr() + "#    " + message;

        for(auto &user : _online_user)
        {
            sendto(sockfd, send_message.c_str(), send_message.size(), 0, (const struct sockaddr*)&user.NetAddr(), sizeof(user.NetAddr()));
        }
    }
private:
    //首次给我发消息等同于登录
    std::vector<InitAddr> _online_user;
};